home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / cug191 / w-chattr.c < prev    next >
Text File  |  1986-04-25  |  3KB  |  82 lines

  1. /*#title 'W_CHATTR    04/18/86' */
  2. /****************************************************************
  3. **                                                             **
  4. **      file: W_CHATTR.C                                          **
  5. **                                                             **
  6. **      library function:   w_chattr                           **
  7. **                                                             **
  8. **      programmer: George Woodley                             **
  9. **                                                             **
  10. *****************************************************************
  11.  
  12.     NAME
  13.         w_chattr - Change the display attributes
  14.                    of a message in a c_window.
  15.  
  16.     SYNOPSIS
  17.         success = w_chattr (x, y, attrib, n_bytes);
  18.             WORD success;            1 = Success, 0 = error.
  19.             WORD int x, y;                Starting coords of msg.
  20.             char attrib;            New display attribute.
  21.             WORD n_bytes;            Size of message.
  22.  
  23.     DESCRIPTION
  24.         W_CHATTR positions the cursor in a Chris McVicar C_WINDOW
  25.         and sets the attribute of N_BYTES bytes at the current
  26.         cursor position to the specified value.  If N_BYTES
  27.         exceeds the window dimensions wraparound and scrolling will
  28.         take place according to the rules of C_WINDOW.  
  29.  
  30.         The cursor position will be left undisturbed.
  31.  
  32.         W_CHATTR returns TRUE = 1 if the x,y coordinates are within
  33.         the window, and FALSE = 0 if they are outside the window.
  34.             
  35.     CAUTIONS
  36.         None.
  37.  
  38. ****************************************************************/
  39. /*#eject */
  40.  
  41. #include "STD.H"
  42. #include "C_WDEF.H"
  43. extern char cw_ulx;   /* upper lft X of writeable window, absolute */
  44. extern char cw_uly;      /* upper lft Y of writeable window, absolute */
  45. extern char cw_wid;      /* width of current window, excluding border */
  46. extern char cw_hgt;      /* height of current window, excludng border */
  47. extern char cw_page;  /* display page in alphanumeric mode */
  48. extern int  scrnbase; /* segment of screen display RAM */
  49.  
  50.  
  51. /****************************************************************
  52.     W_CHATTR function
  53. ****************************************************************/
  54. w_chattr (x, y, attrib, n_bytes)
  55.  
  56. WORD x, y;                /* Starting coords of msg. */
  57. char attrib;            /* New display attribute. */
  58. WORD n_bytes;            /* Size of message. */
  59. {
  60.     WORD offset, count;
  61.  
  62.     if ((x >= cw_wid) || (y >= cw_hgt)) {
  63.         w_msg ("W_CHATTR - Cursor out of range");
  64.         return (FALSE);
  65.         }
  66.     for (count = 1; count <= n_bytes; count++)  {
  67.         offset = (((y + cw_uly) * 80 + (x + cw_ulx)) * 2)
  68.                  + (4000 * cw_page) + 1;
  69.         poke (scrnbase, offset, &attrib, 1);
  70.  
  71.         x++;
  72.         if (x >= cw_wid) {
  73.             x = 0;
  74.             y++;
  75.             }
  76.         if (y >= cw_hgt) {
  77.             w_scroll (UP, 1);
  78.             y = cw_hgt - 1;
  79.             }
  80.         }
  81.     }
  82.